#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "TypeDefin.h"

using namespace std;

/*HJJ QQ479287006
 *将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入：l1 = [1,2,4], l2 = [1,3,4]
输出：[1,1,2,3,4,4]
示例 2：

输入：l1 = [], l2 = []
输出：[]
示例 3：

输入：l1 = [], l2 = [0]
输出：[0]

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

 * */

ListNode *mergeTwoLists(ListNode *list1, ListNode *list2) {

    if (list1 == nullptr || list2 == nullptr) {
        if (list1)
            return list1;
        else if (list2)
            return list2;
        else
            return nullptr;

    }


    ListNode *ret = nullptr;
    ListNode *ret1 = nullptr;
    while (list1 != nullptr && list2 != nullptr) {
        if (list1->val <= list2->val) {
            if (ret == nullptr) {
                ret = list1;
                ret1 = list1;
            } else {
                ret->next = list1;
                ret = ret->next;

            }
            list1 = list1->next;

        } else {

            if (ret == nullptr) {
                ret = list2;
                ret1 = list2;
            } else {
                ret->next = list2;
                ret = ret->next;

            }

            list2 = list2->next;
        }


    }

    while (list1 != nullptr) {
        ret->next = list1;
        break;
    }
    while (list2 != nullptr) {
        ret->next = list2;
        break;
    }

    return ret1;

}